[IA64] add VGCF_online flag for XEN_DOMCTL_setvcpucontext to make vcpu online.
authorIsaku Yamahata <yamahata@valinux.co.jp>
Tue, 10 Jun 2008 06:54:47 +0000 (15:54 +0900)
committerIsaku Yamahata <yamahata@valinux.co.jp>
Tue, 10 Jun 2008 06:54:47 +0000 (15:54 +0900)
Extend the XEN_DOMCTL_setvcpucontext hypercall with VGCF_online
to make vcpu online.
This extension is necessary for save/restore support of pv_ops linux guest.
Currently Linux kernel makes vcpus offline except a boot processor
(vcpu = 0) when saving so that only vcpu = 0 is made online by the tools
stack when restoring. Then Linux kernel itself makes other vcpus up.
On the other hand, pv_ops linux guest doesn't make vcpus offline.
It uses stop_machine_run() keeping all vcpus online.
Thus all of vcpus context must be saved/restored and all vcpus needs to be
made online by the tools stack. So there needs a way to make vcpu online.
Add VGCF_online flag to the XEN_DOMCTL_setvcpucontext hypercall
following the x86 way.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
xen/arch/ia64/xen/domain.c
xen/include/public/arch-ia64.h

index 126ef80c8fbfbb1c0c7ab70c384626ae0fbe00da..b45d75afd8d9dbb67fb3acd33321ba7305185283 100644 (file)
@@ -1200,7 +1200,8 @@ int arch_set_info_guest(struct vcpu *v, vcpu_guest_context_u c)
 
                v->is_initialised = 1;
                /* Auto-online VCPU0 when it is initialised. */
-               if (v->vcpu_id == 0)
+               if (v->vcpu_id == 0 || (c.nat != NULL && 
+                                       c.nat->flags & VGCF_online))
                        clear_bit(_VPF_down, &v->pause_flags);
        }
 
index 7a779d6005127dcc964af71ab9081f7a71dc4f3b..0c43cee8550216f55fd8b440a9b1315ae7e621a7 100644 (file)
@@ -391,6 +391,7 @@ struct vcpu_guest_context_regs {
 struct vcpu_guest_context {
 #define VGCF_EXTRA_REGS (1UL << 1)     /* Set extra regs.  */
 #define VGCF_SET_CR_IRR (1UL << 2)     /* Set cr_irr[0:3]. */
+#define VGCF_online     (1UL << 3)  /* make this vcpu online */
     unsigned long flags;       /* VGCF_* flags */
 
     struct vcpu_guest_context_regs regs;